﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using LojaWeb.Models;
using LojaVirtual.Infra;
using LojaVirtual.Comuns.Clientes;

namespace LojaWeb.Controllers
{
    public class CarrinhoLojaController : Controller
    {
		private UnitOfWork db;

		public CarrinhoLojaController()
		{
			db = new UnitOfWork();
		}

        public ActionResult Index()
        {
			if (this.isLogado())
			{
				var carrinho = CarrinhoLoja.GetCarrinho(this.HttpContext);
				return View(carrinho);
			}
			else
			{
				return RedirectToAction("Login", "Cliente");
			}
        }

		public ActionResult AdicionaAoCarrinho(int id)
		{
			if (this.isLogado())
			{
				var produto = db.Produtos.Recuperar(id);
				var carrinho = CarrinhoLoja.GetCarrinho(this.HttpContext);
				carrinho.AdicionaAoCarrinho(produto);

				return RedirectToAction("Index");
			}
			else
			{
				return RedirectToAction("Login", "Cliente");
			}
		}

		public ActionResult RemoveDoCarrinho(int id)
		{
			if (this.isLogado())
			{
				var carrinho = CarrinhoLoja.GetCarrinho(this.HttpContext);
				carrinho.RemoveDoCarrinho(id);

				return RedirectToAction("Index");
			}
			else
			{
				return RedirectToAction("Login", "Cliente");
			}
		}

		public ActionResult RemoveTodosDoCarrinho(int id)
		{
			if (this.isLogado())
			{
				var carrinho = CarrinhoLoja.GetCarrinho(this.HttpContext);
				var item = carrinho.Itens.FirstOrDefault(i => i.Produto.ID == id);
				int qntItens = item.Quantidade;

				for (int i = 0; i < qntItens; i++)
				{
					carrinho.RemoveDoCarrinho(item.Produto.ID);
				}

				return RedirectToAction("Index");
			}
			else
			{
				return RedirectToAction("Login", "Cliente");
			}
		}

		public ActionResult FinalizaCompra()
		{
			if (this.isLogado())
			{
				var clienteLogado = this.GetClienteLogado();

				var carrinho = CarrinhoLoja.GetCarrinho(this.HttpContext);
				var compra = new Compra();
				compra.Cliente = db.Clientes.Recuperar(clienteLogado.ID);
				compra.DataEfetuada = DateTime.Now;
				compra.PagamentoConfirmado = false;

				foreach (var item in carrinho.Itens)
				{
					var prodID = item.Produto.ID;
					item.Produto = db.Produtos.Recuperar(prodID);
					compra.Itens.Add(item);
					
				}
				db.Compras.EfetuaCompra(compra);
				db.SalvarAlteracoes();
				
				carrinho.Esvaziar();

				return RedirectToAction("Sucesso");
			}
			else
			{
				return RedirectToAction("Login", "Cliente");
			}
		}

		public ActionResult Sucesso()
		{
			return View();
		}

    }
}
